package staticProxy;

/**
 * 静态代理模式：
 * 真实对象和代理对象都要实现同一个接口
 * 代理对象要代理真实角色
 * 调用代理对象的方法
 *
 * 好处：代理对象可以做很多真实对象不能做的事情
 */
public class StaticProxyTest {
    public static void main(String[] args) {
        MarryCompany marryCompany = new MarryCompany(new You());
        marryCompany.getMarry();
    }
}

//接口
interface Marry{
    public void getMarry();
}

//真实目标
class You implements Marry{

    @Override
    public void getMarry() {
        System.out.println("你结婚了");
    }
}

//代理对象，婚庆公司
class MarryCompany implements Marry{
    private Marry marry;

    MarryCompany(Marry marry){
        this.marry = marry;
    }

    @Override
    public void getMarry() {
        before();
        marry.getMarry();//代理
        after();
    }

    private void before(){
        System.out.println("布置现场");
    }

    private void after(){
        System.out.println("收尾款");
    }
}